
package chasqui.servlets;

import conn.bean.BEmpleado;
import conn.dao.DSesion;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.*;
import javax.servlet.http.Cookie;


public class UsuarioServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException
    {
        String action=request.getParameter("action");
        String jspPage="/index.jsp";

        if ((action == null) || (action.length() < 1)) {
            action = "default";
        }
        if ("default".equals(action)) {
            String usuario = "";
            String fechaUltimoAcceso = "";

            /*Búsqueda del posible cookie si existe para recuperar su valor y ser mostrado en el campo usuario */
            Cookie[] todosLosCookies = request.getCookies();
            for (int i=0; i<todosLosCookies.length; i++) {
            Cookie unCookie = todosLosCookies[i];
            if (unCookie.getName().equals("cokieUsu")) {
            usuario = unCookie.getValue();
                }
            }

            /* Para mostrar la fecha del último acceso a la página.
            Para ver si el cookie que almacena la fecha existe, se busca en los
            cookies existentes. */
            for (int i=0; i<todosLosCookies.length; i++) {
            Cookie unCookie = todosLosCookies[i];
            if (unCookie.getName().equals("ultimoAcceso")) {
            fechaUltimoAcceso = unCookie.getValue();
                }
            }

            /* Se comprueba que la variable es igual a vacío, es decir no hay ningún
            cookie llamado ?ultimoAcceso?, por lo que se recupera la fecha, y se guarda en un
            nuevo cookie.*/
            if (fechaUltimoAcceso.equals(""))
            {
            Date fechaActual = new Date();
            fechaUltimoAcceso = fechaActual.toString();
            Cookie cookieFecha = new
            Cookie("ultimoAcceso",fechaUltimoAcceso);
            cookieFecha.setPath("/");
            cookieFecha.setMaxAge(60*60*24);
            response.addCookie(cookieFecha);
            }
            HttpSession sesionOk = request.getSession();
            request.setAttribute("fechaUltimoAcceso", fechaUltimoAcceso);
            request.setAttribute("usuario", usuario);

            usuario = (String)sesionOk.getAttribute("usuario");

            jspPage = "/usuario.jsp";
        }
        else if (action.equals("login")){

                    String usuario = "";
            
                    HttpSession sesionOk = request.getSession();
                    /*ME ASEGURO SI ES QUE ALGUIEN PONE EL URL DIRECTAMENTE, NO ENTRE*/
                    if (sesionOk.getAttribute("usuario") == null && sesionOk.getAttribute("password")==null ) {
                    String mensaje="Debe iniciar sesion!!!.";
                    request.setAttribute("mensajeError", mensaje);
                    jspPage="/usuario.jsp";}
            
                    String user=request.getParameter("usuario");
                    String password=request.getParameter("password");
                    DSesion sesionManager=new DSesion();

                    /*SI ALGUIEN DEJA LOS ESPACIOS EN BLANCO TAMPOCO PODRA ENTRAR*/
                    if((user.length()==0&& password.length()==0)||(user==null&&password==null)){
                    String mensaje="No puede dejar los espacios en blanco!!!!";
                    request.setAttribute("mensajeError", mensaje);
                    jspPage="/usuario.jsp";}
                    else{/*SI ESTAN EN LA BASE DE DATOS, SE VALIDARA*/
                    if(sesionManager.permitidosSesion(user, password)){

                    System.out.println("checkbox: " + request.getParameter("recordarUsuario") + "<br>");
                    sesionOk.setAttribute("usuario",user);
                    if ((request.getParameter("recordarUsuario") != null) &&
                    (request.getParameter("recordarUsuario").equals("on")))
                    {
                    System.out.println("entra");
                    Cookie cookieUsuario = new Cookie ("cokieUsu",user);
                    cookieUsuario.setPath("/");
                    cookieUsuario.setMaxAge(60*60*24);
                    response.addCookie(cookieUsuario);
                    }
                    /* Se realiza un proceso similar a la creación de cookie de recordar el
                    usuario. En este caso se trata de crear un nuevo cookie con el nuevo valor de la
                    fecha y guardarlo con el mismo nombre. De esta forma será borrado el anterior y
                    prevalecerá el valor del último.*/
                    Date fechaActual = new Date();
                    String fechaUltimoAcceso = fechaActual.toString();
                    Cookie cookieFecha = new Cookie("ultimoAcceso",fechaUltimoAcceso);
                    cookieFecha.setPath("/");
                    cookieFecha.setMaxAge(60*60*24);
                    response.addCookie(cookieFecha);

                    usuario = (String)sesionOk.getAttribute("usuario");
                    request.setAttribute("empleadovalido", usuario);
                    jspPage="/user_pestanas.jsp";}
                else{/*DE LO CONTRARIO SALDRA MENSAJE DE CLAVE O USUARIO INCORRECTO*/
                    String mensaje="Usuario y/o clave incorrectos.<br>Vuelve a intentarlo.";
                    request.setAttribute("mensajeError", mensaje);
                    jspPage="/usuario.jsp";}}   
        }
        else if("modificar_usuario".equals(action)){
                    String usuario = "";

                    HttpSession sesionOk = request.getSession();

                    if (sesionOk.getAttribute("usuario") == null || ((String)sesionOk.getAttribute("usuario")).length()==0) {
                    String mensaje="Debe iniciar sesion!!!.";
                    request.setAttribute("mensajeError", mensaje);
                    jspPage="/usuario.jsp";}
                    else {
                    usuario = (String)sesionOk.getAttribute("usuario");
                    request.setAttribute("usuario", usuario);
                    jspPage = "/modificar_usuario.jsp";}
                }
        else if("user_val_index".equals(action)){
                    String usuario = "";

                    HttpSession sesionOk = request.getSession();

                    if (sesionOk.getAttribute("usuario") == null || ((String)sesionOk.getAttribute("usuario")).length()==0) {
                    String mensaje="Debe iniciar sesion!!!.";
                    request.setAttribute("mensajeError", mensaje);
                    jspPage="/usuario.jsp";}
                    else {
                    usuario = (String)sesionOk.getAttribute("usuario");
                    String str = "User: "+usuario+"";
                    request.setAttribute("usuario", str);
                    jspPage = "/index2.jsp";}
                }
        else if("no_user_index".equals(action))
                {
                    String usuario = "";
                    HttpSession sesionOk = request.getSession();
                    request.setAttribute("usuario", usuario);
                    jspPage = "/index2.jsp";
                }
        
        dispatch(jspPage, request, response);
    }

    protected void dispatch(String jsp, HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException
    {
        if (jsp != null)
        {
            RequestDispatcher rd = request.getRequestDispatcher(jsp);
            rd.forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException
    {
        doPost(request, response);
    }
}